package com.security.securityproject.service.serviceImpl;

import com.security.securityproject.service.MyAccessService;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;

/**
 * @author huangkf
 * @version 1.0
 * @date 2022/12/5 : 22:40
 * @description 实现类，实现判断权限列表中是否包含角色管理员，如果有返回true，没有返回false，记住通过@Service注解，将其注入到容器中
 */

@Service
public class MyAccessServiceImpl implements MyAccessService {
    @Override
    public boolean hasPermission(HttpServletRequest request, Authentication authentication) {

            //当我们自定义登录逻辑UserDetails对象注入时，通过这个方法可以获取到
            Object o = authentication.getPrincipal();

            if (o instanceof UserDetails) {//如果获取到的确实是UserDetails对象，那么获取UserDetails对象
                UserDetails userDetails = (UserDetails) o;

                Collection<? extends GrantedAuthority> collection = userDetails.getAuthorities();//获取权限列表

                /**实现判断权限列表中，是否有管理员角色**/
                //contains方法，用于判断，Collection接口列表中，有没有指定元素
                //因为Collection列表中元素是GrantedAuthority类型的，所以需要new SimpleGrantedAuthority("ROLE_管理员")
                //将一个字符串"ROLE_管理员"转换为GrantedAuthority类型的对象
                return collection.contains(new SimpleGrantedAuthority("ROLE_超级管理员"));
            }

            return false;

        }
}
